#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/10/20 下午2:42
# @Author  : Samge

import os
import xlsxwriter
from PIL import Image
import configs


def img_resize(infile, outfile):
    """图片的尺寸归一化"""
    im = Image.open(infile)
    # (x, y) = im.size  # 读取图像大小
    x_s = configs.OUT_PIC_WIDTH  # 定义标准宽度 单位px
    y_s = configs.OUT_PIC_HEIGHT  # 基于标准宽度的计算高度 单位px
    out = im.resize((x_s, y_s), Image.ANTIALIAS)  # 使用高质量抗齿距模式调整图像大小
    out.save(outfile)


def img_into_excel_with_input():
    """输入待处理的文件夹路径，并输出excel文件。 注意：如果目标文件已打开，先关闭在执行，不然无法覆盖修改
    excel里面的宽高 与 像素px的对换比例：https://zhidao.baidu.com/question/303644616924678644.html"""

    _xml_file_name = configs.XML_FILE_NAME

    # 先删除该文件
    if os.path.exists(_xml_file_name):
        os.remove(_xml_file_name)
        print('del {}'.format(_xml_file_name))

    # 创建一个新的Excel文件并添加工作表。
    workbook = xlsxwriter.Workbook(_xml_file_name)
    worksheet = workbook.add_worksheet()

    # 设置列宽
    worksheet.set_column('A:A', 20)
    worksheet.set_column('B:B', 16)

    # 接收用户的待处理文件夹目录
    _img_dir = 'input_image'
    if configs.NEED_CUSTOM_PIC_PATH:
        _img_dir = input("请输入要处理的图片文件夹所在路径：").replace("'", "").replace(" ", "")
    print(_img_dir)
    g = os.walk(_img_dir)

    # 创建图片尺寸处理的临时目录
    _tmp_dir = '{}_tmp'.format(_img_dir)
    if not os.path.exists(_tmp_dir):
        os.mkdir(_tmp_dir)

    # 设置顶部tab标题栏
    worksheet.set_row(0, 30)
    worksheet.write('A1', "图片名")
    worksheet.write('B1', "图片")

    # excel行号，从1开始，因为0的位置设置标题了（根据实际需求调整）
    _index = 1

    # 遍历图片文件夹 插入jpg / png 格式结尾的图片 & 文件名
    for path, dir_list, file_list in g:
        for file_name in file_list:
            if file_name.endswith('.jpg') or file_name.endswith('.png'):

                _img_path = os.path.join(path, file_name)
                print('\n正在处理第 {} 张图：{}\n'.format(_index, _img_path))

                # 注意，设置行高是从下标 0 开始计算的
                worksheet.set_row(_index, 122)

                # 下一行
                _index += 1

                # 写图片名称
                worksheet.write('A{}'.format(_index), file_name)

                # 插入图像。
                _tmp_file = os.path.join(_tmp_dir, file_name)
                img_resize(_img_path, _tmp_file)
                worksheet.insert_image('B{}'.format(_index), _tmp_file)

    # 写入完毕，关闭资源
    workbook.close()
    print('处理完毕，文件已保存到：{}/{}'.format(os.path.dirname(_img_dir), _xml_file_name))


if __name__ == '__main__':
    img_into_excel_with_input()

